package wf3.core.bean;

import acceso.util.Escritor;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import wf.dto.BottonDto;
import wf.dto.PagparDto;
import wf.dto.RegistroDto;
import wf.dto.ValregDto;
import wf3.core.dao.PageDAO;
import wf3.core.manager.DAOFactory;

/**
 *
 * @author Rómulo Galindo Tanta
 */
public class PaginaTBean extends PaginaBean {

    //Variables especificas de tipo R
    private List<BottonDto> lbote = new ArrayList<>();
    private List<BottonDto> lbotg = new ArrayList<>();

    public PaginaTBean() {
    }

    @Override
    public void ini(int id_session, int id_transa, int id_frawor, int co_conten, short co_pagina, boolean il_autinc, short co_regist) {
        this.p_id_sesion = id_session;
        this.p_id_transa = id_transa;
        this.p_id_frawor = id_frawor;
        this.p_co_conten = co_conten;
        this.p_co_pagina = co_pagina;
        this.p_il_autinc = il_autinc;
        this.p_co_regist = co_regist;
        dao = (PageDAO) DAOFactory.get_pagedao((int) this.p_id_sesion);
    }

    @Override
    public void build() {
        //Módelo básico de contrucción
        this.transaini();
        //Cuerpo de solicitudes
        try {
            this.lval = dao.getValpag(p_co_conten, p_co_pagina, (int) p_id_frawor, p_il_autinc, p_co_regist);
            if (!this.lval.isEmpty()) {
                //Conseguir lista de titulos
                this.ltit = dao.getPagtit(p_co_conten, p_co_pagina, (int) p_id_frawor);
                //Conseguir lista de registros
                this.lreg = dao.getPagreg(p_co_conten, p_co_pagina, (int) p_id_frawor);
                //Conseguir lista de botones
                this.lbot = dao.getPagbot((int) p_id_frawor, p_co_conten, p_co_pagina);
                //lista auxiliar de registros a eliminar
                List<RegistroDto> lreg_aux = new ArrayList<>();

                //Validar estructura de lreg con lval
                boolean zxc_ = false;
                int mcss = 1;
                String csstext = "";
                for (RegistroDto m_reg : this.lreg) {
                    for (int o = 0; o < this.lreg.size(); o++) {
                        ValregDto m_val = this.lval.get(o);
                        if (m_val.getCo_pagreg() == m_reg.getId().getCo_pagreg()) {
                            if (!m_reg.getTi_estreg().contentEquals("O")) {
                                csstext = csstext + "#tb" + getP_co_pagina() + " tr td:nth-child(" + mcss + "){vertical-align: " + m_reg.getVa_valign() + ";text-align: " + m_reg.getVa_alireg() + ";white-space: " + m_reg.getTi_nowrap() + ";}\n";
                            } else {
                                csstext = csstext + "#tb" + getP_co_pagina() + " tr td:nth-child(" + mcss + "){}\n";
                            }
                            mcss++;
                            zxc_ = true;
                            break;
                        }
                    }
                    if (!zxc_) {
                        lreg_aux.add(m_reg);
                    }
                }
                csstext = csstext + "#tb" + getP_co_pagina() + " tr td:nth-child(" + mcss + "){padding-left: 3px;text-align: center;white-space: nowrap;}\n";
                setCss(csstext);

                //Si existiese registros a eliminar
                lreg_aux.stream().forEach((m_reg) -> {
                    this.lreg.remove(m_reg);
                });

                //Asiganación de ciclos (vueltas) de los registros
                this.ca_ciclos = this.lval.size() / this.lreg.size() == 0 ? 1 : this.lval.size() / this.lreg.size();

                //Tratamiento de botones
                this.lbot.stream().forEach((btn) -> {
                    this.lpar = dao.getPagpar(p_co_conten, p_co_pagina, btn.getId().getCo_pagbot());
                    if (!this.lpar.isEmpty()) {
                        btn.setParametro(String.join(",", this.lpar.stream().map((PagparDto t) -> t.getId().getCo_pagreg() + "," + t.getCo_conpar()).collect(Collectors.toList())));
                    }
                    switch (btn.getTi_pagbot()) {
                        case "G":
                            lbotg.add(btn);
                            break;
                        default:
                            lbote.add(btn);
                            break;
                    }
                });
                il_dibuja = true;
            }
        } catch (Exception ep) {
            Escritor.escribe_errors("[PaginaRBean:build]" + ep.getMessage());
            setException(ep);
            ep.printStackTrace();
            throw ep;
        }

        //--fin cuerpo de solicitudes
        this.transafin();
    }

    @Override
    public void close() {
        dao.CLOSE_SESSION();
    }

    public List<BottonDto> getLbote() {
        return lbote;
    }

    public void setLbote(List<BottonDto> lbote) {
        this.lbote = lbote;
    }

    public List<BottonDto> getLbotg() {
        return lbotg;
    }

    public void setLbotg(List<BottonDto> lbotg) {
        this.lbotg = lbotg;
    }

}
